/**
 * 构建父子关系 ， 稍后路径匹配的时候 /about/a -> 这个路径对应的记录，
 * 看记录中有没有 parent，如果有将 parent 的记录也找到 , [parentRecord，childRecord]
 * @param {*} route 
 * @param {*} pathMap 
 * @param {*} parent 
 */
export const addRouteRecord = (route, pathMap, parent) => {
  const path = parent ? `${parent.path}/${route.path}` : route.path;
  const record = {
    path: route.path, // 用户设置的 path， 为了儿子能拿到父亲的路径
    name: route.name, // 用户设置的 name
    component: route.component, // 用户设置的 component
    parent,
  };
  // 判断是否同名的路由
  if (!pathMap[path]) {
    // 防止同一个路径 多次进行注册
    pathMap[path] = record;
  }
  // 递归子路由
  if (route.children) {
    route.children.forEach((child) => {
      addRouteRecord(child, pathMap, record);
    });
  }
};

export function createRouteMap(routes, routesOptions = {}) {
  const pathMap = routesOptions;
  routes.forEach((route) => {
    addRouteRecord(route, pathMap);
  });
  /**
   * "/about": {
   *  component: {},
   *  name: 'About',
   *  parent: undefined,
   *  path: '/about
   * }
   */
  return {
    pathMap,
  };
}
